package com.ticket.system.mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.ticket.system.domain.YanchuSession;
import com.ticket.system.domain.vo.SessionAndTicket;
import com.ticket.system.domain.vo.SessionVo;
import com.ticket.system.domain.vo.TicketStatistics;
import org.apache.ibatis.annotations.Param;

/**
 * 场次Mapper接口
 * 
 * @author ruoyi
 * @date 2023-09-26
 */
public interface YanchuSessionMapper 
{
    /**
     * 查询场次
     * 
     * @param id 场次主键
     * @return 场次
     */
    public YanchuSession selectYanchuSessionById(Long id);

    public YanchuSession selectSessionDetailById(Long id);

    /**
     * 查询场次列表
     * 
     * @param yanchuSession 场次
     * @return 场次集合
     */
    public List<YanchuSession> selectYanchuSessionList(YanchuSession yanchuSession);

    public List<SessionVo> selectSessionVoList(Long performId);

    public List<TicketStatistics> selectTicketTotalList(@Param("list")List<Long> list);

    /**
     * 新增场次
     * 
     * @param yanchuSession 场次
     * @return 结果
     */
    public int insertYanchuSession(YanchuSession yanchuSession);

    /**
     * 修改场次
     * 
     * @param yanchuSession 场次
     * @return 结果
     */
    public int updateYanchuSession(YanchuSession yanchuSession);

    public Integer updateNumsMoney(@Param("count")Integer count, @Param("price")BigDecimal price,@Param("id")Long id);
    public Integer reduceNumsMoney(@Param("count")Integer count, @Param("price")BigDecimal price,@Param("id")Long id);
    public Integer updateReservNum(@Param("count")Integer count,@Param("id")Long id);

    public int updateChecked(@Param("count")Integer count,@Param("id")Long id);

    /**
     * 删除场次
     * 
     * @param id 场次主键
     * @return 结果
     */
    public int deleteYanchuSessionById(Long id);

    /**
     * 批量删除场次
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteYanchuSessionByIds(Long[] ids);

    public int updateTotalMoney(@Param("sessionId")Long sessionId,@Param("seatNums")Integer seatNums,
                                @Param("totalMoney")BigDecimal totalMoney,@Param("resveredCount")Integer resveredCount);

    public int updateChecked(@Param("count") Long count,@Param("id") Long id);

    public int updateStatus(@Param("id") Long id,@Param("status") Integer status,@Param("oldStatus") Integer oldStatus,
                            @Param("cancelTips")String cancelTips);

    public int updateCancel(@Param("id") Long id,@Param("status") Integer status,@Param("oldStatus") Integer oldStatus,
                            @Param("cancelTips")String cancelTips);
    /**
     * 待销售
     *
     * @return
     */
    List<YanchuSession> getToBeSold(Long operaId);

    /**
     * 待销中
     *
     * @return
     */
    List<YanchuSession> getOnSale(Long operaId);

    /**
     * 待销结束
     *
     * @return
     */
    List<YanchuSession> getEndOfSale(Long operaId);

    /**
     * 所有存在场次的演出id
     *
     * @return
     */
    List<YanchuSession> getInPerForm(Long operaId);

    /**
     * 演出时间区间
     *
     * @param performIds
     * @return
     */
    List<SessionAndTicket> getTime(@Param("performIds") List<Long> performIds,@Param("sessionIds")List<Long> sessionIds);

    /**
     * 演出实名
     *
     * @param performIds
     * @return
     */
    List<Long> getAutType(@Param("performIds") List<Long> performIds,@Param("sessionIds")List<Long> sessionIds);

    /**
     * 演出电子票
     *
     * @param performIds
     * @return
     */
    List<Long> getIsTickets(@Param("performIds") List<Long> performIds,@Param("sessionIds")List<Long> sessionIds);

    /**
     * 单个演出 在售场次数
     *
     * @param performId
     * @return
     */
    Integer getOnSaleNum(Long performId);

    /**
     * 单个演出 待售场次数
     *
     * @param performId
     * @return
     */
    Integer getToBeSoldNum(Long performId);

    /**
     * 售票前50的演出
     *
     * @return
     */
    List<Long> getFiftyOnsale();

    /**
     * 场次演出时间段内的演出
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<Long> getPerformByTime(@Param("startDate") Date startDate,
                                @Param("endDate") Date endDate);

    List<YanchuSession> getHallName(@Param("perIds") List<Long> perIds,@Param("sessionIds") List<Long> sessionIds);

    /**
     * 场次列表pc
     *
     * @param yanchuSession
     * @return
     */
    List<YanchuSession> selectYanchuSessionBy(YanchuSession yanchuSession);

    /**
     * 场次列表（单表）
     *
     * @param session
     * @return
     */
    List<YanchuSession> selectSessionList(YanchuSession session);

    /**
     * 当前演出是否为创建中或取消状态
     *
     * @param id
     * @return
     */
    Integer chackStatus(Long id);

    /**
     * 当前演出是否为创建中或取消状态(删除)
     *
     * @param tickPriceId
     * @return
     */
    Integer chackDeleteStatus(Long tickPriceId);

    List<YanchuSession> ticketList(@Param("dayStartTime") Date dayStartTime,
                                   @Param("dayOfMonthEndTime") Date dayOfMonthEndTime,
                                   @Param("operaId") Long operaId);

    List<YanchuSession> selectSessionByPerFormId(Long performId);

    List<YanchuSession> getOnsaleByPerIds(@Param("performIds") List<Long> performIds);

    List<YanchuSession> getToBeSoldPerIds(@Param("performIds")List<Long> performIds);

    public List<YanchuSession> selectRemindSessionList();

    List<String> getSessionsByOperaId(@Param("operaId") Long operaId, @Param("startDay") Date startDay, @Param("endTDay") Date endTDay);

    List<YanchuSession> getNoSaleByPerIds(@Param("performId") Long performId);
}
